var DEFAULT_EACH_PAGE_DATA = 20;

/**
 * 主要实现sesssion会话失效，和failure同一操作，减少其他js代码量，如果要增加新的参数，按照格式修改。
 */
function Gobal() {

}
Gobal.ExtAjax = function(param) {
	// 参数准备
	// 请求的url
	var url = param.url;
	// 提交方法POST/GET
	var method = Ext.isEmpty(param.method) ? "POST" : param.method;
	// 是否异步
	var async = Ext.isEmpty(param.async) ? true : param.async;
	// 参数
	var params = param.params;
	// 成功之后调用的方法
	var success = Ext.isEmpty(param.success) ? null : param.success;
	// 成功之后的消息，如果指定这个值，那么在有msg的时候，就会忽略此值，否则就alert这个结果
	var successMsg = Ext.isEmpty(param.success) ? null : param.success;
	// 警告之后调用的方法
	var warn = Ext.isEmpty(param.warn) ? null : param.warn;
	// 错误之后调用的方法
	var error = Ext.isEmpty(param.error) ? null : param.error;
	// 失败之后调用的方法
	var failure = Ext.isEmpty(param.failure) ? null : param.failure;
	// 是否自动对Error提醒
	var autoErrorTip = Ext.isEmpty(param.autoErrorTip)
			? true
			: param.autoErrorTip;
	// 是否自动对Msg提醒
	var autoMsgTip = Ext.isEmpty(param.autoMsgTip) ? true : param.autoMsgTip;
	// 要进行Enable和Disable的组件
	var toggleObjs = Ext.isEmpty(param.toggleObjs) ? null : param.toggleObjs;

	// 让所有传进来的组件对象都失效!
	if (toggleObjs != null) {
		for (var i = 0; i < toggleObjs.length; i++) {
			enableArray[i].setDisabled(true);
		}
	}
	// 调用ajax
	Ext.Ajax.request({
				url : url,
				method : method,
				async : async,
				params : params,
				success : function(response, action) {
					var resultJSON = Ext.JSON.decode(response.responseText);
					var context = resultJSON.context;
					if (resultJSON.sessionError != null) {
						Ext.Msg.alert('错误提示', '会话超时，请重新登录!', function() {
									parent.location.href = 'index.jsp';
								});
					} else if (resultJSON.rightsError != null) {
						Ext.Msg.alert('错误提示', '你没有此权限!');
					} else if (context.error) {
						// 如果错误，并且autoErrorTip是true,就打印信息
						if (autoErrorTip) {
							var errorMsgList = context.errorMsgList;
							if (errorMsgList.length > 0) {
								var errorStr = "";
								for (var i = 0; i < errorMsgList.length; i++) {
									errorStr += errorMsgList[i] + "</br>";
								}
								Ext.Msg.alert('错误提示', errorStr, function() {
										});
							}
						}
						if (error != null) {
							error(context);
						}
					} else if (context.warn) {
						// 如果msgList，并且autoErrorTip是true,就打印信息
						if (autoMsgTip) {
							var warnMsgList = context.warnMsgList;
							if (warnMsgList.length > 0) {
								var msgStr = "";
								for (var i = 0; i < warnMsgList.length; i++) {
									msgStr += warnMsgList[i] + "</br>";
								}
								Ext.Msg.alert('警告提示', msgStr, function() {
										});
							}
						}
						if (warn != null) {
							warn(context);
						}
					} else if (context.success) {
						if (successMsg != null) {
							Ext.Msg.alert('成功提示', successMsg, function() {
									});
						}
						if (success != null) {
							success(context);
						}
					}
					// 让所有传进来的组件对象都生效!
					if (toggleObjs != null) {
						for (var i = 0; i < toggleObjs.length; i++) {
							enableArray[i].setDisabled(false);
						}
					}
				},
				failure : function(response, options) {
					if (failure == null) {
						alert("会话超时，或系统错误");
					} else {
						failure(response, options);
					}
				}
			});
}

/**
 * 获取param
 * 
 * @param {}
 *            param
 * @return {}
 */
Gobal.getUrlParam = function(param) {
	var url = window.location.href;
	var re = new RegExp("(///?|&)" + param + "=([^&]+)(&|$)", "i");
	var m = url.match(re);
	if (m) {
		return m[2];
	} else {
		return '';
	}
}

/**
 * json转换成string
 * 
 * @param {}
 *            obj
 * @return {}
 */
Gobal.jsonToString = function(obj) {
	var THIS = this;
	switch (typeof(obj)) {
		case 'string' :
			return '"' + obj.replace(/(["\\])/g, '\\$1') + '"';
		case 'array' :
			return '[' + obj.map(THIS.jsonToString).join(',') + ']';
		case 'object' :
			if (obj instanceof Array) {
				var strArr = [];
				var len = obj.length;
				for (var i = 0; i < len; i++) {
					strArr.push(THIS.jsonToString(obj[i]));
				}
				return '[' + strArr.join(',') + ']';
			} else if (obj == null) {
				return 'null';

			} else {
				var string = [];
				for (var property in obj)
					string.push(THIS.jsonToString(property) + ':'
							+ THIS.jsonToString(obj[property]));
				return '{' + string.join(',') + '}';
			}
		case 'number' :
			return obj;
		case false :
			return obj;
	}
}

/**
 * 获取JSON集合 的某个JSON对象
 * 
 * @param {}
 *            param
 * @return {}
 */
Gobal.findJSON = function(jsonCollection, findStr) {
	var jsonCollStr = Gobal.jsonToString(jsonCollection);
	var re = new RegExp("{[^{]*" + findStr + "[^}]*}", "i");
	var m = jsonCollStr.match(re);
	if (m) {
		return eval("(" + m[0] + ")");;
	} else {
		return {};
	}
}
